package com.lzh.others.basejava.Thread_21.bilibili_course_thread;


import com.lzh.others.basejava.Thread_21.utils.SmallTool;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * @Description: CompletableFuture:使用练习
 * 场景1：
 * 小白进入餐厅吃饭，点了饭后等待厨师做饭，这个期间玩王者，饭好了开始吃饭。
 * 场景2：
 * 小白进入餐厅吃饭，点了饭后等待厨师做饭，这个期间玩王者，菜做好了后，厨师交给->服务员，服务员再去打饭，然后把饭菜一起端给->小白开始吃饭。
 * 要求：用多线程模拟该场景
 * 场景3：
 * 小白进入餐厅吃饭，
 * 点饭后 厨师做饭，服务员蒸饭，最后一起端给小白，等待期间小白打王者
 * @Author: LiuZiHao
 * @Date: 2022/12/28 15:25
 */
public class CompletableFuturePrac_01_and_02 {
    public static void main(String[] args) {
        SmallTool.printTimeAndThread("小白进入餐厅");
        SmallTool.printTimeAndThread("小白点了 青椒肉丝 + 一碗米饭");
        CompletableFuture<String> cf1 = CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndThread("厨师炒菜");
            SmallTool.sleepMillis(200);
//            SmallTool.printTimeAndThread("厨师打饭");
//            SmallTool.sleepMillis(200);
            return "青椒肉丝";
        }).thenCompose(dish -> CompletableFuture.supplyAsync(() -> {
            SmallTool.printTimeAndThread("服务员打饭");
            SmallTool.sleepMillis(200);
            return dish + " + 米饭";
        }));

        SmallTool.printTimeAndThread("小白在打王者");
        SmallTool.printTimeAndThread(String.format("%s,小白开吃", cf1.join()));
    }
}
